package wcg;

import java.util.LinkedList;

import ikelib.wintime;

/**
 * データをインポートするためのデータを定義、保持するクラス
 * データ本体、サンプルレート、ＣＨＩＤ、先頭時刻、長さを保持する。
 * @author ikechan
 * 
 * 
 */
public class ImportData {
	/*
	 * データ単体
	 */
	private class ImportDataElement{
		public int samplerate;
		public int ch;
		public int[] data;
		ImportDataElement(int c , int[] d, int s){
			samplerate = s;
			ch = c;
			data=d;
		}
	}
	
	private LinkedList<ImportDataElement> chdata = null;
	private wintime Starttime=null; 		// 最初の時刻
	private boolean DataValid;  	//
	private int     Length;			// データの長さ（秒）
	
	/**
	 * 
	 */
	public ImportData(){
		chdata = new LinkedList<ImportDataElement>();
		Starttime = null;
		DataValid=false;
		Length =0;
	}
	/**
	 * データが有効かどうか
	 * @return
	 */
	public boolean IsDataValid(){
		return DataValid;
	}
	/**
	 *  先頭の時刻をセット
	 * @param time  文字列形式ので時刻 　2013/1/1 12:59:00 
	 * @return
	 */
	public boolean SetStartTime(String time){
		wintime wt = new wintime();
		if(!wt.setTime(time)){
			return false;
		}
		Starttime = wt;
		if(Length != 0) DataValid=true;
		return true;
	}
	/**
	 *  データを追加する。
	 * @param id　 CH ID
	 * @param data  int[] なデータ
	 * @param samplerate　サンプルレート 100Hz/sなど
	 * @return
	 */
	public boolean AddData(int id,  int[] data,int samplerate){
		int sec = data.length / samplerate;
		if(data.length != (sec*samplerate)){
			return false;
		}
		if(Length==0) Length=sec;
		else {	// 同じ秒数でないといけない
			if(Length != sec){
				return false;
			}
		}
		ImportDataElement ed = new ImportDataElement(id,data,samplerate);
		chdata.add(ed);
		if(Starttime != null) DataValid=true;
		return true;
	}
	/**
	 *  チャネル数を返す。
	 * @return
	 */
	public int GetChCount(){
		return chdata.size();
	}
	/**
	 *  チャネルＩＤの配列を返す。
	 * @return
	 */
	public int[] GetId() {
		int num = chdata.size();
		if(num<=0) return null;
		int[] ret = new int[num];
		for(int i=0;i<num;i++){
			ret[i] = chdata.get(i).ch;
		}
		return ret;
	}
	/**
	 *  指定チャネルのデータを返す
	 * @param id
	 * @return
	 */
	public int[] GetData(int id){
		int num = chdata.size();
		for(int i=0;i<num;i++){
			if(id == chdata.get(i).ch){
				return chdata.get(i).data;
			}
		}
		return null;
	}
	/**
	 *  指定チャネルのサンプルレートを返す。
	 * @param id
	 * @return
	 */
	public int GetSamplerate(int id){
		int num = chdata.size();
		for(int i=0;i<num;i++){
			if(id == chdata.get(i).ch){
				return chdata.get(i).samplerate;
			}
		}
		return 0;
	}
	/**
	 *  スタートの時刻をwintimeで返す。
	 * @return
	 */
	public wintime GetWinTime() {
		return new wintime(Starttime);
	}
	/**
	 *  時間幅（秒）を返す。
	 * @return
	 */
	public int GetSpan() {
		return Length;
	}

}
